{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "training_set = pd.read_csv('train.csv')\n",
    "test_set = pd.read_csv('test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>pixel0</th>\n",
       "      <th>pixel1</th>\n",
       "      <th>pixel2</th>\n",
       "      <th>pixel3</th>\n",
       "      <th>pixel4</th>\n",
       "      <th>pixel5</th>\n",
       "      <th>pixel6</th>\n",
       "      <th>pixel7</th>\n",
       "      <th>pixel8</th>\n",
       "      <th>...</th>\n",
       "      <th>pixel774</th>\n",
       "      <th>pixel775</th>\n",
       "      <th>pixel776</th>\n",
       "      <th>pixel777</th>\n",
       "      <th>pixel778</th>\n",
       "      <th>pixel779</th>\n",
       "      <th>pixel780</th>\n",
       "      <th>pixel781</th>\n",
       "      <th>pixel782</th>\n",
       "      <th>pixel783</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 785 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   label  pixel0  pixel1  pixel2  pixel3  pixel4  pixel5  pixel6  pixel7  \\\n",
       "0      1       0       0       0       0       0       0       0       0   \n",
       "1      0       0       0       0       0       0       0       0       0   \n",
       "2      1       0       0       0       0       0       0       0       0   \n",
       "3      4       0       0       0       0       0       0       0       0   \n",
       "4      0       0       0       0       0       0       0       0       0   \n",
       "\n",
       "   pixel8    ...     pixel774  pixel775  pixel776  pixel777  pixel778  \\\n",
       "0       0    ...            0         0         0         0         0   \n",
       "1       0    ...            0         0         0         0         0   \n",
       "2       0    ...            0         0         0         0         0   \n",
       "3       0    ...            0         0         0         0         0   \n",
       "4       0    ...            0         0         0         0         0   \n",
       "\n",
       "   pixel779  pixel780  pixel781  pixel782  pixel783  \n",
       "0         0         0         0         0         0  \n",
       "1         0         0         0         0         0  \n",
       "2         0         0         0         0         0  \n",
       "3         0         0         0         0         0  \n",
       "4         0         0         0         0         0  \n",
       "\n",
       "[5 rows x 785 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "training_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pixel0</th>\n",
       "      <th>pixel1</th>\n",
       "      <th>pixel2</th>\n",
       "      <th>pixel3</th>\n",
       "      <th>pixel4</th>\n",
       "      <th>pixel5</th>\n",
       "      <th>pixel6</th>\n",
       "      <th>pixel7</th>\n",
       "      <th>pixel8</th>\n",
       "      <th>pixel9</th>\n",
       "      <th>...</th>\n",
       "      <th>pixel774</th>\n",
       "      <th>pixel775</th>\n",
       "      <th>pixel776</th>\n",
       "      <th>pixel777</th>\n",
       "      <th>pixel778</th>\n",
       "      <th>pixel779</th>\n",
       "      <th>pixel780</th>\n",
       "      <th>pixel781</th>\n",
       "      <th>pixel782</th>\n",
       "      <th>pixel783</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 784 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   pixel0  pixel1  pixel2  pixel3  pixel4  pixel5  pixel6  pixel7  pixel8  \\\n",
       "0       0       0       0       0       0       0       0       0       0   \n",
       "1       0       0       0       0       0       0       0       0       0   \n",
       "2       0       0       0       0       0       0       0       0       0   \n",
       "3       0       0       0       0       0       0       0       0       0   \n",
       "4       0       0       0       0       0       0       0       0       0   \n",
       "\n",
       "   pixel9    ...     pixel774  pixel775  pixel776  pixel777  pixel778  \\\n",
       "0       0    ...            0         0         0         0         0   \n",
       "1       0    ...            0         0         0         0         0   \n",
       "2       0    ...            0         0         0         0         0   \n",
       "3       0    ...            0         0         0         0         0   \n",
       "4       0    ...            0         0         0         0         0   \n",
       "\n",
       "   pixel779  pixel780  pixel781  pixel782  pixel783  \n",
       "0         0         0         0         0         0  \n",
       "1         0         0         0         0         0  \n",
       "2         0         0         0         0         0  \n",
       "3         0         0         0         0         0  \n",
       "4         0         0         0         0         0  \n",
       "\n",
       "[5 rows x 784 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = training_set.iloc[:, 1:].values\n",
    "y_train = training_set.iloc[:, 0:1].values\n",
    "x_test = test_set.iloc[:, :].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train.reshape(-1, 28, 28, 1)\n",
    "x_test = x_test.reshape(-1, 28, 28, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train/255.\n",
    "x_test = x_test/255."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  1.,  0., ...,  0.,  0.,  0.],\n",
       "       [ 1.,  0.,  0., ...,  0.,  0.,  0.],\n",
       "       [ 0.,  1.,  0., ...,  0.,  0.,  0.],\n",
       "       ..., \n",
       "       [ 0.,  0.,  0., ...,  1.,  0.,  0.],\n",
       "       [ 0.,  0.,  0., ...,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0., ...,  0.,  0.,  1.]], dtype=float32)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from keras.utils import np_utils\n",
    "y_train = np_utils.to_categorical(y_train, num_classes = 10)\n",
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout, Conv2D, MaxPool2D, Flatten"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "classifier = Sequential()\n",
    "\n",
    "classifier.add(Conv2D(32, (5, 5), padding = 'Same', input_shape = (28, 28, 1), activation = 'relu'))\n",
    "#classifier.add(MaxPool2D(pool_size = (2, 2)))\n",
    "\n",
    "#classifier.add(Conv2D(32, (5, 5), padding = 'Same', activation = 'relu'))\n",
    "classifier.add(MaxPool2D(pool_size = (2, 2)))\n",
    "classifier.add(Dropout(0.25))\n",
    "\n",
    "classifier.add(Conv2D(64, (3, 3),padding = 'Same', activation = 'relu'))\n",
    "classifier.add(Conv2D(64, (3, 3),padding = 'Same', activation = 'relu'))\n",
    "classifier.add(MaxPool2D(pool_size = (2, 2), strides = (2, 2)))\n",
    "classifier.add(Dropout(0.25))\n",
    "\n",
    "#classifier.add(Conv2D(64, (3, 3), activation = 'relu'))\n",
    "#classifier.add(MaxPooling2D(pool_size = (2, 2)))\n",
    "\n",
    "classifier.add(Flatten())\n",
    "\n",
    "classifier.add(Dense(units = 256, activation = 'relu'))\n",
    "classifier.add(Dropout(0.5))\n",
    "\n",
    "classifier.add(Dense(units = 10, activation = 'sigmoid'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "classifier.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics = ['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "datagen = ImageDataGenerator(\n",
    "        featurewise_center=False,\n",
    "        samplewise_center=False,\n",
    "        featurewise_std_normalization=False,\n",
    "        samplewise_std_normalization=False,\n",
    "        zca_whitening=False,\n",
    "        rotation_range=10,\n",
    "        zoom_range = 0.1,\n",
    "        width_shift_range=0.1,\n",
    "        height_shift_range=0.1,\n",
    "        horizontal_flip=False,\n",
    "        vertical_flip=False)\n",
    "datagen.fit(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/30\n",
      "328/328 [==============================] - 119s 362ms/step - loss: 0.5486 - acc: 0.8281\n",
      "Epoch 2/30\n",
      "328/328 [==============================] - 117s 356ms/step - loss: 0.1652 - acc: 0.9500\n",
      "Epoch 3/30\n",
      "328/328 [==============================] - 114s 349ms/step - loss: 0.1128 - acc: 0.9665\n",
      "Epoch 4/30\n",
      "328/328 [==============================] - 120s 365ms/step - loss: 0.0923 - acc: 0.9723\n",
      "Epoch 5/30\n",
      "328/328 [==============================] - 114s 348ms/step - loss: 0.0846 - acc: 0.9755\n",
      "Epoch 6/30\n",
      "328/328 [==============================] - 117s 358ms/step - loss: 0.0752 - acc: 0.9778\n",
      "Epoch 7/30\n",
      "328/328 [==============================] - 117s 358ms/step - loss: 0.0720 - acc: 0.9788\n",
      "Epoch 8/30\n",
      "328/328 [==============================] - 116s 355ms/step - loss: 0.0674 - acc: 0.9812\n",
      "Epoch 9/30\n",
      "328/328 [==============================] - 115s 351ms/step - loss: 0.0663 - acc: 0.9807\n",
      "Epoch 10/30\n",
      "328/328 [==============================] - 110s 335ms/step - loss: 0.0598 - acc: 0.9823\n",
      "Epoch 11/30\n",
      "328/328 [==============================] - 110s 336ms/step - loss: 0.0618 - acc: 0.9830\n",
      "Epoch 12/30\n",
      "328/328 [==============================] - 111s 337ms/step - loss: 0.0616 - acc: 0.9826\n",
      "Epoch 13/30\n",
      "328/328 [==============================] - 110s 336ms/step - loss: 0.0606 - acc: 0.9834\n",
      "Epoch 14/30\n",
      "328/328 [==============================] - 109s 331ms/step - loss: 0.0603 - acc: 0.9832\n",
      "Epoch 15/30\n",
      "328/328 [==============================] - 112s 340ms/step - loss: 0.0614 - acc: 0.9832\n",
      "Epoch 16/30\n",
      "328/328 [==============================] - 111s 337ms/step - loss: 0.0587 - acc: 0.9831\n",
      "Epoch 17/30\n",
      "328/328 [==============================] - 111s 338ms/step - loss: 0.0616 - acc: 0.9836\n",
      "Epoch 18/30\n",
      "328/328 [==============================] - 783s 2s/step - loss: 0.0573 - acc: 0.9842\n",
      "Epoch 19/30\n",
      "328/328 [==============================] - 118s 359ms/step - loss: 0.0596 - acc: 0.9838\n",
      "Epoch 20/30\n",
      "328/328 [==============================] - 115s 350ms/step - loss: 0.0614 - acc: 0.9837\n",
      "Epoch 21/30\n",
      "328/328 [==============================] - 121s 368ms/step - loss: 0.0655 - acc: 0.9830\n",
      "Epoch 22/30\n",
      "328/328 [==============================] - 125s 381ms/step - loss: 0.0611 - acc: 0.9842\n",
      "Epoch 23/30\n",
      "328/328 [==============================] - 119s 362ms/step - loss: 0.0600 - acc: 0.9838\n",
      "Epoch 24/30\n",
      "328/328 [==============================] - 117s 355ms/step - loss: 0.0608 - acc: 0.9846\n",
      "Epoch 25/30\n",
      "328/328 [==============================] - 116s 355ms/step - loss: 0.0664 - acc: 0.9835\n",
      "Epoch 26/30\n",
      "328/328 [==============================] - 118s 360ms/step - loss: 0.0667 - acc: 0.9829\n",
      "Epoch 27/30\n",
      "328/328 [==============================] - 117s 355ms/step - loss: 0.0635 - acc: 0.9831\n",
      "Epoch 28/30\n",
      "328/328 [==============================] - 114s 346ms/step - loss: 0.0608 - acc: 0.9843\n",
      "Epoch 29/30\n",
      "328/328 [==============================] - 118s 359ms/step - loss: 0.0650 - acc: 0.9835\n",
      "Epoch 30/30\n",
      "328/328 [==============================] - 115s 350ms/step - loss: 0.0631 - acc: 0.9833\n"
     ]
    }
   ],
   "source": [
    "track = classifier.fit_generator(datagen.flow(x_train,y_train, batch_size= 128),\n",
    "                              epochs = 30, steps_per_epoch=x_train.shape[0]//128)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['loss', 'acc'])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "track.history.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Model Accuracy')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmYZHV97/H3t7au3mfpnoXZB0Zl3AYzoleNcI0LkAga0ECColExucHooz43aLwuRB8Tl4QneYxKrigYFREUuV4MKgGXG1SGXRgGhp6tZ+2enqX32r73j3Oqu6ane6Zmumeq65zP63nqqbPVqd+vTvfn/Op3Tp1j7o6IiMRDotYFEBGR00ehLyISIwp9EZEYUeiLiMSIQl9EJEYU+iIiMaLQl9gzs5Vm5maWqmLZd5jZr05HuUROBYW+1BUz22pmOTPrmDD9kTC4V9amZCe28xCpFYW+1KMtwBXlETN7IdBYu+KI1A+FvtSjbwJvrxi/Cri5cgEzazezm82sx8y2mdnHzCwRzkua2RfMrNfMuoA/nOS1XzOz3Wa208w+bWbJ6RTYzBrM7Hoz2xU+rjezhnBeh5n9yMwOmlmfmf2yoqx/E5ah38w2mdkfTKccIgp9qUe/BtrM7OwwjP8E+PcJy/wL0A6sBs4j2Em8M5z3HuCPgHOA9cBlE157E1AAzgqXeT3w7mmW+W+BlwPrgBcD5wIfC+d9COgGOoGFwEcBN7PnAtcAL3X3VuANwNZplkNiTqEv9arc2n8d8BSwszyjYkfwEXfvd/etwBeBt4WLvBW43t13uHsf8NmK1y4ELgQ+4O6D7r4P+Cfg8mmW98+A69x9n7v3AJ+qKE8eWAyscPe8u//Sg4tiFYEGYK2Zpd19q7s/O81ySMwp9KVefRP4U+AdTOjaATqADLCtYto2YEk4fAawY8K8shVAGtgddrccBL4KLJhmec+YpDxnhMOfBzYDPzGzLjO7FsDdNwMfAD4J7DOzW8zsDESmQaEvdcndtxEc0L0I+P6E2b0ErecVFdOWM/5tYDewbMK8sh3AKNDh7nPCR5u7P3+aRd41SXl2hXXpd/cPuftq4I3AB8t99+7+bXd/VfhaB/5hmuWQmFPoSz17F/Aadx+snOjuReBW4DNm1mpmK4APMt7vfyvw12a21MzmAtdWvHY38BPgi2bWZmYJMzvTzM47gXI1mFm24pEAvgN8zMw6w9NNP14uj5n9kZmdZWYGHCbo1ima2XPN7DXhAd8RYDicJ3LSFPpSt9z9WXffMMXs9wGDQBfwK+DbwI3hvH8D7gYeBR7i6G8KbyfoHnoSOADcRtDnXq0BgoAuP14DfBrYADwGPB6+76fD5dcAPwtfdz/wr+5+H0F//t8TfHPZQ9DF9NETKIfIUUw3URERiQ+19EVEYkShLyISIwp9EZEYUeiLiMTIrLsaYEdHh69cubLWxRARqSsPPvhgr7t3Hm+5WRf6K1euZMOGqc7CExGRyZjZtuMvpe4dEZFYUeiLiMRIZEJ/7+ERXvHZe7j9we5aF0VEZNaKTOjPa86wr3+Urt6BWhdFRGTWikzop5MJls9voqtn8PgLi4jEVGRCH2B1RzNbehX6IiJTiVTorwpDv1TSReRERCYTqdBf3dnCaKHErkPDtS6KiMisFKnQX9XRDKAuHhGRKUQq9Fcr9EVEjilSod/Z2kBLQ0pn8IiITCFSoW9mrOpopkstfRGRSUUq9CHo1+/q0Q+0REQmE7nQX93ZzM6Dw4zki7UuiojIrBO50F/V0Yw7bO8bqnVRRERmnciF/pmdLQDq4hERmUTkQn9leNqmDuaKiBwtcqHf0pBiQWsDW3TapojIUSIX+hAczFVLX0TkaJEM/VUdLfpVrojIJCIZ+qs7mukbzHFwKFfrooiIzCrRDP1OHcwVEZlMJEN/7GqbOpgrInKESIb+snlNpBKm++WKiEwQydBPJxMsn9ekg7kiIhNEMvShfOE1hb6ISKVIh/7W/bpfrohIpWmFvpldYGabzGyzmV17jOUuMzM3s/XTeb8TsbqzhZF8id2HR07XW4qIzHonHfpmlgS+BFwIrAWuMLO1kyzXCvw18JuTfa+ToTN4RESONp2W/rnAZnfvcvcccAtwySTL/R3wOeC0NrnPHDtXX2fwiIiUTSf0lwA7Ksa7w2ljzOwcYJm7/+hYKzKzq81sg5lt6OnpmUaRxnW2NtCcSepgrohIhemEvk0ybeyoqZklgH8CPnS8Fbn7De6+3t3Xd3Z2TqNIFYUzY5UuvCYicoTphH43sKxifCmwq2K8FXgBcJ+ZbQVeDtx5Wg/mdrSwRd07IiJjphP6DwBrzGyVmWWAy4E7yzPd/ZC7d7j7SndfCfwauNjdN0yrxCdgVUcz3QeGGS3ofrkiIjCN0Hf3AnANcDewEbjV3Z8ws+vM7OKZKuB0rO4M7pe7bb/ulysiApCazovd/S7grgnTPj7FsudP571OxuqO8v1yB3nOwtbT/fYiIrNOZH+RC7CyowlA1+AREQlFOvRbs2k6Wxvo6tHBXBERiHjoQ3AXLbX0RUQC0Q/9ToW+iEhZ5EN/VUcz+wdzHBrK17ooIiI1F/nQHzuDRz/SEhGJfuivKl94TdfgERGJfugvm9tEMmHq1xcRIQahn0npfrkiImWRD30IDuY+q3P1RUTiEfqrdb9cEREgJqG/qrOZkXyJPbpfrojEXDxCv0Nn8IiIQExC/8zO4Fx93VBFROIuFqG/oLWBpkySZ9XSF5GYi0XomxmrdOE1EZF4hD7A6s4Whb6IxF5sQj+4X+6Q7pcrIrEWm9Bf3dFMyWG77pcrIjEWn9AvX3hNXTwiEmOxCf2VOldfRCQ+od+WTdPR0qBz9UUk1mIT+qBbJ4qIxCv0O5rVvSMisRar0Nf9ckUk7mIV+qs7db9cEYm3WIV++Wqb6tcXkbiaVuib2QVmtsnMNpvZtZPM/6CZPWlmj5nZPWa2YjrvN13L5+l+uSISbycd+maWBL4EXAisBa4ws7UTFnsYWO/uLwJuAz53su83EzKpBMvmNupgrojE1nRa+ucCm929y91zwC3AJZULuPu97l6+7sGvgaXTeL8ZsaqjWb/KFZHYmk7oLwF2VIx3h9Om8i7gx9N4vxmxurOFrb26X66IxNN0Qt8mmTZpkprZlcB64PNTzL/azDaY2Yaenp5pFOn4VnU0M5wv6n65IhJL0wn9bmBZxfhSYNfEhczstcDfAhe7++hkK3L3G9x9vbuv7+zsnEaRjm+1zuARkRibTug/AKwxs1VmlgEuB+6sXMDMzgG+ShD4+6bxXjNm7Fz9Hp2rLyLxc9Kh7+4F4BrgbmAjcKu7P2Fm15nZxeFinwdagO+Z2SNmducUqzttFrY10JhO6mCuiMRSajovdve7gLsmTPt4xfBrp7P+U0H3yxWROIvVL3LLVnc288SuwxwcytW6KCIip1UsQ//yly7n0FCet371fvYc0lk8IhIfsQz9V63p4Bt//lJ2HRzh0i//F8/qoK6IxEQsQx/gFWd2cMvVL2ckX+QtX7mfx7oP1rpIIiKnXGxDH+AFS9q57S9fQVMmyRU3/JpfPdNb6yKJiJxSsQ59CH6he/tfvoJl85p45zd+y48eO+r3ZSIikRH70AdY2Jblu+/9b6xbNof3fedhvvnrbbUukojIKaHQD7U3pvnmu17GHzxvAf/rjt9x/c+exl0XZRORaFHoV8imk3zlyt/jst9byvU/e4aP//AJiroap4hEyLR+kRtFqWSCz1/2IuY3Z/jqL7roG8rxuUtfRHODPioRqX9KskmYGR+56GzmNWf47I+f4j837uMNz1/Im85ZwqvO6iCV1BckEalPCv1jeO95Z3Luqnnc9mA3P3psN3c8souOlgxvfPEZvPmcJbxwSTtmk91WQERkdrLZdrBy/fr1vmHDhloX4yijhSL3berhjod3cs/GfeSKJVZ3NvPmdUt40zlLWDavqdZFFJEYM7MH3X39cZdT6J+4Q8N5fvz4bn7w8E5+s6UPgPUr5vK6tQtZ1dHMyo5mls9rIptO1rikIhIXCv3TZOfBYX74yE5+8NBOntl35DV8FrY1sGJeMyvmN7FifhPL5zezcn4TK+Y1096UrlGJRSSKFPo1cGAwx7a+IbbtH2Tb/iG27R9ie18wvK//yDtFdrRkOGtBC2ctaGHNgtbwuYXO1gYdJxCRE1Zt6OtA7gya25xhbnOGdcvmHDVvKFdge1+wI9jaO8izPQNs3jfADx/ZRf9IYWy51myKNRU7gmXzmmjLpmjNpmnJpmgNHw0pdR2JyIlT6J8mTZkUz1vUxvMWtR0x3d3Z1z/K5n0DPLO3n809Azyzd4B7ntrLdzfsmHJ9mWRibAfQmk3Tmk0xtynD3OY085qCnc+85gxzm4Ln8kPHGUTiTaFfY2bGwrYsC9uyvPKsjiPm9Q3m2HVwmIHRAv0jBfpH8mPDh0fyDIyMT+8fKfDUnsMcGMpzYCjHVL12jekkrdkU6WSCVNJIJYx0MjE2nk6E05MJMskEna0ZFrc3srg9yxlzxp+186hf7s5wvsih4TwHh/Jjz4eH8xwczjEwUqC5odyIyDC3Kc2cpvHnZOL0dT+WSs7+wRx7D4+Ej1H2Hh5hX/8IPf05CqUSJQ/q5A4l9/ABVIynw0ZSS8OEb83l8YZgvCWbojmToqkhSXMmRWM6SaLK+o4WihwM//8ODuU5OJTjwFCe/pE8mWSCxkySbDp4NKaTNGaC52zFcFO4zKmk0J/Fyq3zE1UsOYeG8/QN5jgwlAueB3P0DeXoG8gxMFogX3QKpRKFopMrligUSxRKTr5YIlcoMZgrMpov8vD2A+wfPPq2knOb0ixub+SMOVkWtzfS1pgiVygxWigxmi8xWiiSK5aHg/HRQrDuUsUeqXLnNHE/ZQS/kE4lbGwHlUqM76zG5yUwwCx4TSIcMGxsmoXjjlMoOvmSUyiWjvgc8sUSxVIwr1RymhuSzGnM0N6YZk5TmrbwuXJae2OaZMI4NHxkeB4KAzSYXuDgUPC5N2dStDelmRO+fm5TeV2ZcN1p2pvSNCSTDOeLwSMXPI9UDFeOj+THP9+R/JHPlcODo4WgPEN5csXSCf9dEX6Obdn02A6gNZsa2wbp5Pj2KTce0uH0ZCKBE3yuxdJ4GBdLQUCXSk4xnDYwUmBv/yj7Do+wr3/0qEuhmMH85gY6WjI0pBKYBds5YUbCgoaUAYmEkU4YhpErlth1cIT+0fHGUqHKS6w0ppM0NyRpyqRoygTB3NyQoljyI8J9OF88qc+00ouXtvPDa1417fUci0I/gpIJO+kdxmRG8kX2HBph96ERdh8aZvehEXYdDJ67DwzzwNYDDIwWaEglwkeSTHk4HYw3pBK0NATfMCa2FCuPWwf/roGSO4UwnIPnICRGCkUKxSPnuTtOsBMJwiVYx8Tpho2FUSphJMNvOuWgyqQSNCUTJAwGRwt09Q4E/9jDeXKFEwvKZMJobwx2DG2NaVobUgzlCuw6NDwWFjN1aad00simkuOfd8Xnnk0nmNOYZsmcbFie8Z3WnLB87eEObE5ThuZMksFckQODQYu1bygXBNtgjr6KkDswGOzIyjvMQsWONF/RiChvt3IwJxNBOCcSRtKMRDheHm7KJFnYlmXNgg4WtjWwsC3LgtYsi9qzLGxroKOlgfQ0fxXv7owWSkd8Yw6+RecZyhUZzBUZGi2MPQ/lK8ZzwfIJg8XtWc5e3BbuBMvfiMIdeLhTb82mKBT9iJ11sMMuHTWtvfHUn9Wn0JfjyqaTrAx/fxBnI/liRXdIjoNhi75Y8rHwbKv4BtDSkDrmmVilkjOQK3BoKB/uWIIwPTSUY7RQGmtZVn79D7oFEmNdBOXugpnucmlpCLpCls2b0dXOGmY29tktaD097zn39LzNcSn0RaqUTSdZ1J5kUXt2RtaXSBht2TRt2XRkw1VmH105TEQkRhT6IiIxMut+kWtmPcB07lfYAUTpDudRqw9Er05Rqw9Er05Rqw8cXacV7t55vBfNutCfLjPbUM1PketF1OoD0atT1OoD0atT1OoDJ18nde+IiMSIQl9EJEaiGPo31LoAMyxq9YHo1Slq9YHo1Slq9YGTrFPk+vQlnsxsJbAFSLt74TjLvgN4t7uf2t+7i8xCUWzpyyxnZlvNLGdmHROmP2JmHgZ4TZlZs5kNmNldtS6LyExS6EutbAGuKI+Y2QuBxtoV5yiXAaPA681s8el8YzPTL+XllIlM6JvZBWa2ycw2m9m1tS7PTAhbxI+HLeC6u52Ymd1oZvvM7HcV0+YBC4H5wKfNrHxJkquAmye8vt3MbjazHjPbZmYfM7NEOC9pZl8ws14z6wL+cJLXfs3MdpvZTjP7tJmdyDVrrwK+AjwG/NmEOvWa2aGwXPvN7LfhezxiZtvDR7+ZPWlmLwlf52Z2VsV6vmFmnw6HzzezbjP7GzPbA3zdzOaa2Y/C9zgQDi+t/BzN7Otmtiucf0c4/Xdm9saK5dJheddNVkkzW2Zm95rZRjN7wszeX7H+n5rZM+HzbLl0zDEdoz6frNhGj5jZRbUua7XMLBv+jT0a1ulT4fRVZvabcBt918yqu8JicB3q+n4ASeBZYDWQAR4F1ta6XDNQr61AR63LMY3yvxp4CfC7immfAw4ArwV6gP8dbr8dwAqCKyyvDJe9Gfgh0AqsBJ4G3hXO+wvgKWAZMA+4N3xtKpx/B/BVoBlYAPwWeG847x3Ar45R7uVACVgLfAh4rGLe+WE5esN1Z4EbgQ8DbwF2Ai8luKLzWQQ/mCEs21kV6/kG8OmKdRaAfwAaCL7xzAcuBZrC+n8PuKPi9f8X+C7BdbzSwHnh9P8JfLdiuUuAx49R18XAS8Lh1rBua8PtdG04/VrgH2r991Tl39xU9fkk8OFal+8k62RASzicBn4DvBy4Fbg8nP4V4C+rWV9UWvrnApvdvcvdc8AtBH/sUkPu/gugb8LkS4DyHeS/BrwZeB1BgO8sLxS2yv8E+Ii797v7VuCLwNvCRd4KXO/uO9y9D/hsxWsXAhcCH3D3QXffB/wTcHmVRX87QdA/CXwHeL6ZnRPOGyUI5D3hukeA7eG8dwOfc/cHPLDZ3av9dXkJ+IS7j7r7sLvvd/fb3X3I3fuBzwDnhfVbHNbvL9z9gLvn3f3n4Xr+HbjIzMq3aHsb8M2p3tTdd7v7Q+FwP7ARWEKwnW4KF7sJeFOV9aipY9SnboV/S+X/mXT4cOA1wG3h9Kq3UVRCfwlBS7Gsmzrf0CEHfmJmD5rZ1bUuzAxZCJTvNvFlYA5By/vmCct1EHxrqwzNbYxv1zM4cptXLreC4B9jt5kdNLODBK3+BVWW8e3AtwDcfRfwc4LuHgi+Weyc5DXXEITyH51kV0hPuAMBwMyazOyrYbfWYeAXwJxwZ7gM6HP3AxNXEpb3/wGXmtkcgp3Dt6opQHgA/RyCluRCd98drnM31X92s8aE+gBcY2aPhV10ddFdVRZ2Zz4C7AN+StCzcdDHz1SrOvOiEvqTXUw8CueivtLdX0Lwj/tXZvbqWhdoJoWt4BJwEfD9CbN7gTxBgJctZzxwdxOEX+W8sh0ELfIOd58TPtrc/fnHK5OZvQJYA3zEzPaEfewvA64ID7DuINjhVPoycCbBzsEJvpFMNETQVVO2aML8iX+vHwKeC7zM3dsIusog+FvfAcwLQ30yNwFXEnQ33e/uk+2kjmBmLcDtBN+ODh9v+dlukvqUt9E6gr+dybbRrOXuRXdfBywl6Nk4e7LFqllXVEK/myMDYCmwq0ZlmTFhq42we+IHBBu73u0l6MMvd1PsAF7j7oOVC7l7kaDP8jNm1mpmK4APEnRfEM77azNbGrbarq147W7gJ8AXzazNzBJmdqaZnVdF+a4iaEmtJQiIdcALCAL7QoJjA/uARRac1pkl6KsvEhyfeAHwagucFZYb4BHgT8MW2wWEXTXH0AoMAwctOPj9iQn1+zHwr+EB3/SEBsEdBMdS3s/R36COYmZpgoD8lruXd757w+1T3k77jree2WKy+rj73jA4S8C/Uaf/S+5+ELiPoE9/jo2f6VV15kUl9B8A1oRHszMEfbd31rhM0xIGSmt5GHg98Ltjv6ou3Am0hMNXAbe5+1RnJr0PGAS6gF8B3yY4aArBP+7dBAftH+LobwpvJ+geepLgwPFtBAf5phQG+FuBf3H3PRWPLQT94leF4f7ucN3bCRoc7wRw9+8RdK0sAPoJwrd8e5T3A28EDhKcDXTHscoCXE9wQLcX+DXwHxPmv43gm9BTBIH8gfIMdx8mCL1Vk3wuE+tsBMdWNrr7P1bMupPxLq2rCA6oz3pT1ceOPO32zdTR/5KZdZa/1ZlZI8FJEBsJTl64LFys6m0UmV/khqdgXU/QirzR3T9T4yJNi5mtJmjdQ3CHs2/XW53M7DsEZ6Z0ELTwP0EQdrcSdMdsB94SHoitC1PU6XyCbwROcMbVe8v94bViZh8HnuPuVx5nuVcBvwQeJ+hqA/goQT943W2nY9TnCmbZNqqWmb2IoMsuSdBQv9Xdrwsz4haChsXDwJXuPnrc9UUl9EUkEHYHPQy8LTyDSmRMVLp3RAQws/cQHCf5sQJfJqOWvohIjKilLyISI7Puwk4dHR2+cuXKWhdDRKSuPPjgg71exT1yZ13or1y5kg0b6u7aYiIiNWVmVV3yQ907IiIxMuta+iISD+7OaKHE4ZE8/SMF+kcKDIwUcJw5jRnmNKVpb0rT2pAi+M3V7BFcsRISidlVrmoo9GXGuTv5ojOcLzKSLzKcKzKcL46NJ8xIJxNkkglSyWA4PfY8PuwQvLbi9UO5QrjO0tjwSD74DY4ZJBNGMmEkLHgkE4TPwfhk2VE+gc0rLl3iHjxK4T+345Qqx318vFgK6psvlsgXS+SKJfKFCeNFJ18IhkcLRXKFErlCidFwWnm8POwO6aSRSSXJJI10Kvi80skEmfJwKvicEmZYWH8I6lget/K4QTKRoCEVPDKpBA2pZMVwgoZ0koZwvYOjRQZGC/SHgTwwUuDwSDAeTA+GC0UfL1tqfLtmUuPbMpNKkkoYg+HrKtdbKB3/7MFkwmhvTI895jSlmRMON2ZSNKaTZNMJGjNJsung0Rg+sukE2XSSVNIoFINtVQy3WflRKDml8LlQDHZCh4YrH4Wx4cMV04slJ5tO0BSWoSkTPBozyWBaJklTOD1R/vsj2FGUt03CGPu7NDPOaM9y+bnLj/uZTIdCP0ZyhRI7Dw5zaDg/9o/ZMPZIBmGSSpCsaL0US07fYI7egVH2DwTPvQOj9EwYPzScZzhXCgI5X6RYxT9zFJkRfLbJBOnU+A6svIMrB3YmlaC9KTMeuuUwD+ebQb7o4Q6kvOMo7xiCHchIvkT/SKFiRxT83LR8GnZ5Z1WeXiiO71hG8+M7nGNJGLRm07RmU7Q0pGjLplnUlmXNghSt2TSppAU7t0JQ1onlzRecQ8N5CsUSzZkUi9uztGRTtGZTY+ttzQat+fIwwKHhPAeHcuFzELIHw2l9gzm6egaDv7l8sAM9FSp3Nm3h8/J5TbQ3ppjTmCGZsLGGyFDYOCk/7z08Mj6eL45to4nPExsT65bNUehL9UolZ2//CDv6htnRN8SOA0Ns7xuiu2+YHQeG2HN4hGp+lpFKBOGUShgDowUmy+900uhoaaCjpYHOlgbWLGilMTPewiq3uoLhRNjqStKQSgbfBEpBcOWLpSOHy63iMIyawvUELacEjemwBZUZf5+GVAIzoxi22IrulNwplQiGSz7WIi85Y639ykZ/ufugctp4C4yxbw5HjRO03BrClm2yzr7ul0oefvs48htIc0MQ8k2Z5KzrWpmoWPLwG9/4t8mRfCn4dpgLxgslJxV+C6x8pBIJkongW1DSjFTSaM2maG9M01KDbqXT8bsphf4s1T+Sp/vAMPv6R4/4it0/kg+/Zh/5VfvwSJ7dB0eOaLmZwaK2LMvmNvHfzpzP8nlNLJvbxNzm9HjXQsVzuQWYKxYZzQcB3NaYHgv3jpYMHa3BcFt29vWzyolLJIxsItixBrcgqD/JhNHckKK5of7j7HT8T9X/p1SnBkYLdB8IWuHdB4boPjBM94GgRd59IOiCmYwZtGTGvwq3ZFPMb8mwsqOZC56fZdm8puAxt5ElcxtpSJ3IbWFFJOoU+qfYwGiBTXv62bSnn6f39vPUnsM8s3eA/YO5I5bLphMsndvE0rmNnLN8ztjworZsRd9niuZMqi7PGBCR2UGhP0OKJefZngGe2tPPpj2H2bSnn6f29NN9YHhsmaZMkucsbOV1axeyYn4zS+c2smxeEO7zmzPqLhGRU06hPw25Qon/eraXu5/Yw0+e2DvWek8mjNUdzcGR+Jcu47mL2njeolaWzGlUK11Eakqhf4KGcgV+vqmH/3hiD/+5cR/9owVaGlL89+ct4PzndLL2jDZWdzarL11EZiWFfhUODeX52ca9/McTe/jF0z2MFkrMbUpz0QsXc8ELFvGKs+Yr5EWkLij0j2Ff/wgfuf1xfv50D4WSs6gtyxXnLucNz1/ES1fOJZXUpYtEpL4o9KfQ1TPAVV//Lb39Od71+6u48AWLedGSdvXJi0hdU+hP4uHtB3jXTcHlnb9z9ctZt2xOjUskIjIzFPoT3PvUPv7Htx6iozXDzX/+MlZ1NNe6SCIiM0ahX+F7G3Zw7fcf53mLWvn6O1/KgtZsrYskIjKjFPoEFzn61/ue5fN3b+L313Tw5St/j5YIXMdDRGSi2CdbseR86v88wc33b+NN687gc5e9mExKZ+WISDRVlW5mdoGZbTKzzWZ27STzV5jZPWb2mJndZ2ZLK+YVzeyR8HHnTBZ+ukbyRa759kPcfP82rn71av7xresU+CISacdt6ZtZEvgS8DqgG3jAzO509ycrFvsCcLO732RmrwE+C7wtnDfs7utmuNzTdmg4z3tu3sBvt/TxsT88m3f//upaF0lE5JSrpll7LrDZ3bvcPQfcAlwyYZm1wD3h8L2TzJ9V9h4e4a1fuZ+Htx/gn684R4EvIrFRTegvAXZUjHeH0yo9ClwaDr8ZaDWz+eF41sw2mNmvzexNk72BmV0dLrOhp6fnBIpVgj1SAAALSklEQVR/cv75nmfYun+Qm955Lhe/+IxT/n4iIrNFNaE/2U9QJ97T68PAeWb2MHAesBMohPOWu/t64E+B683szKNW5n6Du6939/WdnZ3Vl/4kPbN3gBcvncMrzuo45e8lIjKbVBP63cCyivGlwK7KBdx9l7v/sbufA/xtOO1QeV743AXcB5wz/WJPT1fvgH50JSKxVE3oPwCsMbNVZpYBLgeOOAvHzDrMrLyujwA3htPnmllDeRnglUDlAeDT7tBwnt6BHKs7FfoiEj/HDX13LwDXAHcDG4Fb3f0JM7vOzC4OFzsf2GRmTwMLgc+E088GNpjZowQHeP9+wlk/p92W3kEAtfRFJJaq+nGWu98F3DVh2scrhm8Dbpvkdf8FvHCaZZxRW3oHAFjd2VLjkoiInH6x+yXSlp5Bkglj+bymWhdFROS0i13oP9s7yLK5jfrlrYjEUuySb0vPoPrzRSS2YhX6pZKzpXdQ/fkiEluxCv29/SMM54tq6YtIbMUq9Lt6gtM1Vyv0RSSm4hX64Tn66t4RkbiKV+j3DNCUSbKwraHWRRERqYlYhf6W3uDMHbPJriEnIhJ9sQx9EZG4ik3ojxaK7OgbUn++iMRabEJ/R98QJdeZOyISb7EJ/WfLp2vqksoiEmOxCX1dUllEJEah39UzQGdrA63ZdK2LIiJSM7EJfZ25IyISo9Dv6hnUQVwRib1YhP6hoTz7B3VfXBGRWIT+lv3lg7g6R19E4i0Wod/VU74vrlr6IhJvVYW+mV1gZpvMbLOZXTvJ/BVmdo+ZPWZm95nZ0op5V5nZM+HjqpksfLW29Ab3xV02V/fFFZF4O27om1kS+BJwIbAWuMLM1k5Y7AvAze7+IuA64LPha+cBnwBeBpwLfMLM5s5c8avT1TPI8nlNui+uiMReNSl4LrDZ3bvcPQfcAlwyYZm1wD3h8L0V898A/NTd+9z9APBT4ILpF/vEdOl0TRERoLrQXwLsqBjvDqdVehS4NBx+M9BqZvOrfC1mdrWZbTCzDT09PdWWvSrBfXEHdLqmiAjVhf5kF5/3CeMfBs4zs4eB84CdQKHK1+LuN7j7endf39nZWUWRqrfn8Agj+RKrdBBXRIRUFct0A8sqxpcCuyoXcPddwB8DmFkLcKm7HzKzbuD8Ca+9bxrlPWHl++Kqe0dEpLqW/gPAGjNbZWYZ4HLgzsoFzKzDzMrr+ghwYzh8N/B6M5sbHsB9fTjttNnSG5yueaauoy8icvzQd/cCcA1BWG8EbnX3J8zsOjO7OFzsfGCTmT0NLAQ+E762D/g7gh3HA8B14bTTpqt3kOZMkgWtui+uiEg13Tu4+13AXROmfbxi+DbgtileeyPjLf/TrqtnkFWdui+uiAjE4Be5wdU11bUjIgIRD/3RQpHuA0M6XVNEJBTp0N++P7wvrk7XFBEBIh76Y/fFVfeOiAgQ8dAv3xd3ZYcutCYiAhEPfd0XV0TkSJEO/S29ukWiiEil6Ie+DuKKiIyJbOiP3RdXB3FFRMZENvS7wmvu6EJrIiLjohv65dM11b0jIjImsqG/pXeQVMJYNk+na4qIlEU29Lt6B1g+r4l0MrJVFBE5YZFNxK4e3RdXRGSiSIZ+qeRs3a/QFxGZKJKhvzu8L+5q3S1LROQIkQz9LbovrojIpCIZ+l1j98VV6IuIVIpm6PcE98Xt1H1xRUSOEM3Q7x1kdWeL7osrIjJBVaFvZheY2SYz22xm104yf7mZ3WtmD5vZY2Z2UTh9pZkNm9kj4eMrM12ByWzpHVB/vojIJFLHW8DMksCXgNcB3cADZnanuz9ZsdjHgFvd/ctmtha4C1gZznvW3dfNbLGnNpIv0n1gmEtfsvR0vaWISN2opqV/LrDZ3bvcPQfcAlwyYRkH2sLhdmDXzBXxxGzvG8JdZ+6IiEymmtBfAuyoGO8Op1X6JHClmXUTtPLfVzFvVdjt83Mz+/3J3sDMrjazDWa2oaenp/rST6Krp3zmjs7RFxGZqJrQn+xoqE8YvwL4hrsvBS4CvmlmCWA3sNzdzwE+CHzbzNomvBZ3v8Hd17v7+s7OzhOrwQRdY/fFVUtfRGSiakK/G1hWMb6Uo7tv3gXcCuDu9wNZoMPdR919fzj9QeBZ4DnTLfSxbOkZZEFrAy0Nxz1cISISO9WE/gPAGjNbZWYZ4HLgzgnLbAf+AMDMziYI/R4z6wwPBGNmq4E1QNdMFX4yXbpFoojIlI4b+u5eAK4B7gY2Epyl84SZXWdmF4eLfQh4j5k9CnwHeIe7O/Bq4LFw+m3AX7h736moSNmW3kFW6RaJIiKTqqoPxN3vIjhAWznt4xXDTwKvnOR1twO3T7OMVTs4lKNvMKfLL4iITCFSv8gtH8TV6ZoiIpOLVuiP3RdX3TsiIpOJVOhv6R0glTCWzm2sdVFERGalSIV+V88gy+frvrgiIlOJVDpu6R1ktfrzRUSmFJnQL5U8PF1ToS8iMpXIhP7e/hFGC7ovrojIsUTmWgWL2xt54lNvQPdNERGZWmRCH6BZ19sRETmmyHTviIjI8Sn0RURixILros0eZtYDbJvGKjqA3hkqzmwQtfpA9OoUtfpA9OoUtfrA0XVa4e7HvSHJrAv96TKzDe6+vtblmClRqw9Er05Rqw9Er05Rqw+cfJ3UvSMiEiMKfRGRGIli6N9Q6wLMsKjVB6JXp6jVB6JXp6jVB06yTpHr0xcRkalFsaUvIiJTUOiLiMRIZELfzC4ws01mttnMrq11eWaCmW01s8fN7BEz21Dr8pwoM7vRzPaZ2e8qps0zs5+a2TPh89xalvFETVGnT5rZznA7PWJmF9WyjCfCzJaZ2b1mttHMnjCz94fT63I7HaM+9byNsmb2WzN7NKzTp8Lpq8zsN+E2+q6ZZapaXxT69M0sCTwNvA7oBh4Arghv2F63zGwrsN7d6/JHJWb2amAAuNndXxBO+xzQ5+5/H+6c57r739SynCdiijp9Ehhw9y/Usmwnw8wWA4vd/SEzawUeBN4EvIM63E7HqM9bqd9tZECzuw+YWRr4FfB+4IPA9939FjP7CvCou3/5eOuLSkv/XGCzu3e5ew64BbikxmWKPXf/BdA3YfIlwE3h8E0E/5B1Y4o61S133+3uD4XD/cBGYAl1up2OUZ+65YGBcDQdPhx4DXBbOL3qbRSV0F8C7KgY76bON3TIgZ+Y2YNmdnWtCzNDFrr7bgj+QYEFNS7PTLnGzB4Lu3/qoitkIjNbCZwD/IYIbKcJ9YE63kZmljSzR4B9wE+BZ4GD7l4IF6k686IS+pNdRb/++63gle7+EuBC4K/CrgWZfb4MnAmsA3YDX6xtcU6cmbUAtwMfcPfDtS7PdE1Sn7reRu5edPd1wFKCno2zJ1usmnVFJfS7gWUV40uBXTUqy4xx913h8z7gBwQbu97tDftdy/2v+2pcnmlz973hP2UJ+DfqbDuF/cS3A99y9++Hk+t2O01Wn3rfRmXufhC4D3g5MMfMyjcRqTrzohL6DwBrwqPZGeBy4M4al2lazKw5PBCFmTUDrwd+d+xX1YU7gavC4auAH9awLDOiHI6hN1NH2yk8SPg1YKO7/2PFrLrcTlPVp863UaeZzQmHG4HXEhyruBe4LFys6m0UibN3AMJTsK4HksCN7v6ZGhdpWsxsNUHrHoI7nH273upkZt8Bzie4BOxe4BPAHcCtwHJgO/AWd6+bA6NT1Ol8gm4DB7YC7y33h892ZvYq4JfA40ApnPxRgn7wuttOx6jPFdTvNnoRwYHaJEFD/VZ3vy7MiFuAecDDwJXuPnrc9UUl9EVE5Pii0r0jIiJVUOiLiMSIQl9EJEYU+iIiMaLQFxGJEYW+iEiMKPRFRGLk/wPk8LOPTLhWZQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(2, 1, 1)\n",
    "plt.plot(track.history['loss'])\n",
    "plt.title(\"Model Loss\")\n",
    "\n",
    "plt.subplot(2, 1, 2)\n",
    "plt.plot(track.history['acc'])\n",
    "plt.title(\"Model Accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  2.57538599e-22,   2.13860055e-21,   1.19176070e-06, ...,\n",
       "          3.01349983e-18,   7.32958917e-17,   5.81007946e-22],\n",
       "       [  4.12553772e-02,   1.70384037e-11,   3.63805874e-08, ...,\n",
       "          1.23355604e-09,   8.76498007e-07,   8.44394719e-07],\n",
       "       [  6.01048783e-24,   1.32041013e-23,   4.60820375e-18, ...,\n",
       "          4.39607420e-17,   2.63324003e-13,   1.81043947e-06],\n",
       "       ..., \n",
       "       [  2.73239156e-36,   1.41767553e-29,   2.39096420e-22, ...,\n",
       "          2.10024450e-23,   7.74818777e-22,   3.64664364e-24],\n",
       "       [  2.17772584e-17,   9.44362249e-20,   1.61774526e-15, ...,\n",
       "          5.65474696e-13,   1.38682707e-12,   3.47423920e-05],\n",
       "       [  3.06367733e-33,   9.77665881e-32,   4.26333413e-09, ...,\n",
       "          6.63105778e-25,   8.68507533e-22,   5.58048884e-30]], dtype=float32)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict = classifier.predict(x_test)\n",
    "predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict = np.argmax(predict, axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 0, 9, ..., 3, 9, 2])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "submit = pd.DataFrame(predict, columns = ['Label'])\n",
    "submit.reset_index(inplace = True)\n",
    "submit['index'] = submit['index'] + 1\n",
    "submit.rename(columns = {'index' : 'ImageId'}, inplace = True)\n",
    "submit.index = submit['ImageId']\n",
    "submit = submit.drop('ImageId', axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ImageId</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Label\n",
       "ImageId       \n",
       "1            2\n",
       "2            0\n",
       "3            9\n",
       "4            0\n",
       "5            3"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submit.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "submit.to_csv('digit_submit.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(28000, 1)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submit.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x576 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 9\n",
    "plt.figure(figsize = (20, 8))\n",
    "for i in range(n):\n",
    "    ax = plt.subplot(1, n, i+1)\n",
    "    plt.imshow(x_test[i].reshape(28, 28))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
